package com.example.bigdata.scala.数组

import scala.collection.mutable.ArrayBuffer

object TestDemo {
  def main(args: Array[String]): Unit = {
    定长数组()
    变长数组()
    常用函数()
    多维数组()
  }
  def 定长数组(): Unit ={
    val numberArray = new Array[Int](10)
    println("定长数组 numberArray : "+ numberArray)
    for(i <- 0 until  numberArray.length){
      println("i " + i +"\t "+numberArray(i))
    }

    val strArray = Array("First","Second")
    println("定长数组 strArray : " + strArray)
    for ( i<- 0 until strArray.length  )
      println( "i : " + i +"\t " + strArray(i))

  }
  def 变长数组(): Unit ={
    val strArrayVar = ArrayBuffer[String]()

    // += 意思是在尾部添加元素
    strArrayVar += "a"
    strArrayVar += "b"
    strArrayVar += ("xxx","yyy")
    println(strArrayVar)

    // ++= 用于追加内容 ， ++= 可以是任何集合
    // 追加Array 数组
    strArrayVar ++= Array("Wellcome","To","Scala World")
    println(strArrayVar)

    strArrayVar += ("x1","x2")
    //追加List
    strArrayVar ++= List("Wellcome","To","Scala World")
    println(strArrayVar)

    //删除末尾 n个院上诉
    strArrayVar.trimEnd(2)
    println("strArrayVar : " + strArrayVar)


    var intArrayVar = ArrayBuffer(1,2,3)
    intArrayVar.insert(0,6)
    println("intArrayVar : " + intArrayVar)

    // 在  0 位置插入元素 7 8 9
    intArrayVar.insert(0,7,8,9)
    println("intArrayVar : " + intArrayVar)

    // 从 0 位置删除4个元素
    intArrayVar.remove(0,4)
    intArrayVar.insert(0,7,8,9)
    println("intArrayVar : " + intArrayVar)

    //变长数组与定长数组互相转换
    // 变长数组 --> 定长数组
    println(intArrayVar.toArray)

    // 定长数组 --> 变长数组
    val strArray = Array("First","Second")
    println(strArray.toBuffer)

    // 数组遍历 01
    for (i <- 0 to intArrayVar.length -1 ) {
      println("intArrayVar Element : " + intArrayVar(i))

    }

    // 数组遍历 02
    for(i<- 0 until intArrayVar.length  ){
      println("intArrayVar Element : " + intArrayVar(i))

    }

    // 数组遍历 03
    for(i <- intArrayVar){
      println("i : = " + i)
    }

    // 遍历生成新数组
    var intArrayVar2 = for(i<- intArrayVar) yield i*2
    for(i<-intArrayVar2){
      println("intArrayVar2 : " + i)
    }

    //定长数组遍历后的数组仍然是定长数组 ， 原数组不变
    val intArrayNoBufferVar = Array(1,2,3)
    var intArrayNoBufferVar2 = for(i<-intArrayNoBufferVar) yield  i*2

    //加入过滤条件
    var intArrayNoBufferVar3 = for(i<-intArrayNoBufferVar2 if i >2 ) yield i*2
    for(i<- intArrayNoBufferVar3) {
      println("intArrayNoBufferVar3 : " + i)
    }





  }
  def 常用函数(): Unit ={
    val intArr = Array(1,2,3,4,54,6,7,8,3,45,55)
    //求和
    println("intArr 求和 : " + intArr.sum)
    //最大值
    println("intArr 最大值 : " + intArr.max)
    //最小值
    println("intArr 最小值 : " + intArr.min)
    //toString方法
    println("intArr toString方法 : " + intArr.toString)
    //mkString方法01
    println("intArr mkString方法 : " + intArr.mkString(","))
    //mkString方法02
    println("intArr mkString方法 : " + intArr.mkString("<",",",">"))

  }
  def 多维数组(): Unit ={
    var multiDimArr = Array(Array(1,2,3),Array(2,3,4))
    // 获取 multiDimArr 第一行  第三列 元素
    println(multiDimArr(0)(2))

    // 多维数组遍历
     for(i<-multiDimArr){
       println(i.mkString(","))
     }
  }
}
